package com.compass.mobile.framework.base


import LoadingUtils
import LogUtil
import android.content.Intent
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import android.os.Parcelable
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import com.compass.mobile.R
import com.compass.mobile.framework.utils.LiveDataBus
import com.compass.mobile.framework.utils.TipsToast
import com.compass.mobile.framework.utils.getAction
import com.compass.mobile.models.MessageModel
import com.google.gson.Gson
import com.google.gson.JsonIOException
import com.google.gson.reflect.TypeToken
import com.netease.nimlib.sdk.NIMClient
import com.netease.nimlib.sdk.msg.MsgServiceObserve
import toJson
import java.io.Serializable


/**
 *  Activity基类
 */
abstract class BaseActivity : AppCompatActivity() {
    var TAG: String? = this::class.java.simpleName
    private var hasFailure: Boolean = false
    private val dialogUtils by lazy {
        LoadingUtils(this)
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentLayout()
        initView(savedInstanceState)
        initData()
        intListener()


    }



    /**
     * 设置布局
     */
    open fun setContentLayout() {
        setContentView(getLayoutResId())

    }

    /**
     * 初始化视图
     * @return Int 布局id
     * 仅用于不继承BaseVBActivity类的传递布局文件
     *
     */
    abstract fun getLayoutResId(): Int

    /**
     * 初始化布局
     * @param savedInstanceState Bundle?
     */
    abstract fun initView(savedInstanceState: Bundle?)


    /**
     * 初始化数据
     */
    open fun initData() {

    }

    /**
     * 初始化监听事件
     */
    open fun intListener() {

    }

    /**
     * 加载中……弹框
     */
    fun showLoading() {
        showLoading(getString(R.string.default_loading))
    }

    /**
     * 加载提示框
     */
    fun showLoading(msg: String?) {
        dialogUtils.showLoading(msg)
    }

    /**
     * 加载提示框
     */
    fun showLoading(@StringRes res: Int) {
        showLoading(getString(res))
    }

    /**
     * 关闭提示框
     */
    fun dismissLoading() {
        dialogUtils.dismissLoading()
    }

    /**
     * Toast
     * @param msg Toast内容
     */
    fun showToast(msg: String) {
        TipsToast.showTips(msg)
    }

    /**
     * Toast
     * @param resId 字符串id
     */
    fun showToast(@StringRes resId: Int) {
        TipsToast.showTips(resId)
    }


    inline fun <reified T : Serializable> Intent.serializable(key: String): T? = when {
        SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getSerializableExtra(key, T::class.java)
        else -> @Suppress("DEPRECATION") getSerializableExtra(key) as? T
    }


    inline fun <reified T : Parcelable> Intent.parcelableArrayList(key: String): ArrayList<T>? =
        when {
            SDK_INT >= 33 -> getParcelableArrayListExtra(key, T::class.java)
            else -> @Suppress("DEPRECATION") getParcelableArrayListExtra(key)
        }


}